import {Log} from './log/Log.js';
import {DirectionConstant} from "./constants/DirectionConstant.js";
/**
 * 基础类
 */
export class BaseGCG {
    body = 'body';//底层元素
    description  = '注意事项：id和class只能实时从元素中获取';

    /**
     * 组装id
     * @param element
     * @returns {string}
     */
    id(element){
        return $(element).attr('id')?'#'+$(element).attr('id'):false;
    }

    /**
     * 组装class
     * @param element
     * @returns {string}
     */
    class(element){
        return $(element).attr('class')?'.'+$(element).attr('class'):false;
    }

    /**
     * 顶部距离
     * @returns {jQuery}
     */
    getTop(element){
        return $(element).position().top;
    }

    /**
     * 左边距离
     * @returns {jQuery}
     */
    getLeft(element){
        return $(element).position().left;
    }

    /**
     * 宽
     * @returns {*|jQuery}
     */
    getWidth(element){
        return $(element).width();
    }

    /**
     * 高
     * @returns {*|jQuery}
     */
    getHeight(element){
        return $(element).height();
    }

    /**
     * 元素全部宽度（包括内边距、边框和外边距）
     * @returns {*|jQuery}
     */
    getAllWidth(element){
        return $(element).outerWidth(true);
    }

    /**
     * 元素全部高度（包括内边距、边框和外边距）
     * @returns {*|jQuery}
     */
    getAllHeight(element){
        return $(element).outerHeight(true);
    }

    /**
     * 获取容器宽度（包括内边距、边框和外边距）
     * @returns {*|jQuery}
     */
    getContainerWidth(){
        return $('.container').outerWidth(true);
    }

    /**
     * 获取容器高度（包括内边距、边框和外边距）
     * @returns {*|jQuery}
     */
    getContainerHeight(){
        return $('.container').outerHeight(true);
    }

    /**
     * 获取容器的left距离
     * @returns {jQuery}
     */
    getContainerLeft(){
        return $('.container').position().left;
    }

    /**
     * 获取容器的top距离
     * @returns {jQuery}
     */
    getContainerTop(){
        return $('.container').position().top;
    }

    /**
     * 文档高度
     * @returns {*|jQuery}
     */
    getHtmlHeight(){
        return $(document).height();
    }
    /**
     * 文档宽度
     * @returns {*|jQuery}
     */
    getHtmlWidth(){
        return $(document).width();
    }

    /**
     * 窗口高度
     * @returns {*|jQuery}
     */
    getWindowHeight(){
        return $(window).height();
    }
    /**
     * 窗口高度
     * @returns {*|jQuery}
     */
    getWindowWidth(){
        return $(window).width();
    }


    /**
     * 设置方位
     * 注：direction只有上下左右四种(参见常量类：DirectionConstant.js)
     * @param element
     * @param direction
     */
    setDirection(element, direction){
        let dire = DirectionConstant.UP;//默认方位
        if(direction === 'up'){
            dire = DirectionConstant.UP;
        }
        if(direction === 'down'){
            dire = DirectionConstant.DOWN;
        }
        if(direction === 'left'){
            dire = DirectionConstant.LEFT;
        }
        if(direction === 'right'){
            dire = DirectionConstant.RIGHT;
        }
        if(dire){
            if($(element).length>1){
                $(element).each(function (a, b) {
                    $(b).attr('direction', dire);
                })
                return true;
            }
            $(element).attr('direction', dire);
            return true;
        }

        throw new Error('未给与正确的方位属性，或该方位属性未定义');
    }

    /**
     * 获取元素方位
     * @param element
     */
    getDirection(element){
        let direction = $(element).attr('direction');
        if(!direction) throw new Error('方位不存在');
        return direction;
    }
    /**
     * 获取元素坐标
     * @param element
     */
    getPosition(element){
        let position = $(element).position();
        if(!position) throw new Error('坐标不存在');
        return position;
    }



    /**
     * 设置top
     * @param element
     * @param top
     * @returns {string}
     */
    setTop(element, top){
        $(element).css({top: top + 'px'});
    }

    /**
     * 设置left
     * @param element
     * @param left
     * @returns {string}
     */
    setLeft(element, left){
        $(element).css({left: left + 'px'});
    }

    /**
     * 判断两个矩形是否重叠
     * @param rect1
     * @param rect2
     * @returns {boolean}
     */
    isOverlap(rect1, rect2){
        let l1 = { x: rect1.x, y: rect1.y }
        let r1 = { x: rect1.x + rect1.width, y: rect1.y + rect1.height }
        let l2 = { x: rect2.x, y: rect2.y }
        let r2 = { x: rect2.x + rect2.width, y: rect2.y + rect2.height }
        if (
            l1.x > r2.x ||
            l2.x > r1.x ||
            l1.y > r2.y ||
            l2.y > r1.y
        ) return false
        return true
    }

    /**
     * 长度、大小
     * @param element
     * @returns {number}
     */
    getLength(element){
        if(!element) throw new Error('元素不存在');
        return element?1*$(element).length:0;
    }
}